home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / graphics / dxlib50.zip / MICROSOF.ZIP / EASYXEX2.BAS < prev    next >
BASIC Source File  |  1995-02-07  |  4KB  |  117 lines

  1. '  This is the second example program in EASYX.DOC translated to Microsoft
  2. 'Basic version 7.0.  The program should be linked with EASYX.LIB.  When
  3. 'developing code in the Microsoft BASIC development environment (QBX), a 
  4. 'quick library will also be needed.  See README.DOC for information about
  5. 'constructing quick libraries.  Initialize the environment with the quick
  6. 'library.
  7.  
  8. 'Declare EASYX procedures.
  9. DECLARE FUNCTION XLIBMEMREQ& ()
  10. DECLARE FUNCTION INITXLIB& ()
  11. DECLARE FUNCTION XLIBCONFIG% ()
  12. DECLARE FUNCTION XMALLOC& (BYVAL NOBYTES AS LONG, SEG ADDRESS AS LONG, SEG SIZE AS LONG, SEG HANDLE AS LONG)
  13. DECLARE FUNCTION XFREE& (BYVAL HANDLE AS LONG)
  14. DECLARE FUNCTION XUMALLOC& (BYVAL NOBYTES AS LONG, SEG ADDRESS AS LONG, SEG SIZE AS LONG, SEG HANDLE AS LONG)
  15. DECLARE FUNCTION XUNCOMMIT& (BYVAL HANDLE AS LONG, BYVAL STARTOFFSET AS LONG, BYVAL NOBYTES AS LONG)
  16. DECLARE FUNCTION MAPIOMEM& (BYVAL PHYSADDRESS AS LONG, BYVAL SIZE AS LONG, SEG LOGADDRESS AS LONG)
  17. DECLARE FUNCTION LINADR& (SEG VARIABLE AS ANY)
  18. DECLARE SUB MOVMEM (BYVAL DESTADR AS LONG, BYVAL SOURCEADR AS LONG, BYVAL NOBYTES AS LONG)
  19. DECLARE SUB XFCREATE (SEG CONTROLBLOCK AS ANY)
  20. DECLARE SUB XFOPEN (SEG CONTROLBLOCK AS ANY)
  21. DECLARE SUB XFCLOSE (SEG CONTROLBLOCK AS ANY)
  22. DECLARE SUB XFLOAD (SEG CONTROLBLOCK AS ANY)
  23. DECLARE SUB XFSAVE (SEG CONTROLBLOCK AS ANY)
  24. DECLARE SUB XFREAD (SEG CONTROLBLOCK AS ANY)
  25. DECLARE SUB XFWRITE (SEG CONTROLBLOCK AS ANY)
  26.  
  27. 'Record used for all EASYX file operations.
  28. TYPE XFILE
  29.   CONDCODE AS LONG
  30.   FNAME AS STRING * 68
  31.   FHANDLE AS INTEGER
  32.   FPTRMODE AS INTEGER
  33.   FPTR AS LONG
  34.   BLKADR AS LONG
  35.   BLKSIZE AS LONG
  36.   BUFADR AS LONG
  37.   BUFSIZE AS INTEGER
  38.   CONTROL AS INTEGER
  39. END TYPE
  40.  
  41. IF XLIBCONFIG = 0 THEN               'See if XLIB already initialized
  42.   TEMP& = XLIBMEMREQ                 'See how much memory to release for XLIB
  43.   IF TEMP& >= 0& THEN                'TEMP& will be negative if error
  44.     IF TEMP& > 0 THEN TEMP& = SETMEM(-TEMP& - 16&)   'Release extra paragraph
  45.     TEMP& = INITXLIB                 'INITXLIB error code returned in TEMP&
  46.   ELSE
  47.     TEMP& = TEMP& AND &H7FFFFFFF     'Mask sign bit to leave error code only
  48.   END IF
  49.   IF TEMP& <> 0 THEN
  50.     PRINT "Library initialization error:  "; HEX$(TEMP&)
  51.     END
  52.   END IF
  53. END IF
  54.  
  55. DIM I AS INTEGER
  56. DIM ERRCODE AS LONG, NOBYTES AS LONG, XADDRESS AS LONG, XSIZE AS LONG
  57. DIM HANDLE AS LONG, ARRAYADDRESS AS LONG
  58. DIM ARRAY(99) AS INTEGER
  59. DIM FB AS XFILE                    'Declare file control block
  60.  
  61. NOBYTES = &H10000                  'Allocate 64k of extended memory
  62. ERRCODE = XMALLOC(NOBYTES, XADDRESS, XSIZE, HANDLE)
  63. IF ERRCODE <> 0 THEN
  64.   PRINT "Extended memory allocation error:  "; HEX$(ERRCODE)
  65.   END
  66. END IF
  67.  
  68. FOR I = 0 TO 99                    'Put something in ARRAY()
  69.   ARRAY(I) = I
  70. NEXT I
  71.  
  72. ARRAYADDRESS = LINADR(ARRAY(0))    'Compute linear address of ARRAY()
  73.  
  74. FB.CONDCODE = 0                    'Set control block to create file
  75. FB.FNAME = "JUNK.DAT" + CHR$(0)    'Specify file name.  Terminate with zero
  76. FB.BLKADR = ARRAYADDRESS           'Will transfer ARRAY() to the file
  77. FB.BLKSIZE = 200                   'There are 200 bytes in ARRAY()
  78. FB.BUFSIZE = 0                     'Force XLIB to use its internal buffer
  79. CALL XFSAVE(FB)                    'Create file and save ARRAY() to it
  80. IF FB.CONDCODE <> 0 THEN
  81.   PRINT "File save error:  "; HEX$(FB.CONDCODE)
  82.   END
  83. END IF
  84.  
  85. CALL XFOPEN(FB)                 'Reopen the file
  86. IF FB.CONDCODE <> 0 THEN
  87.   PRINT "File open error:  "; HEX$(FB.CONDCODE)
  88.   END
  89. END IF
  90.  
  91. FB.BLKADR = XADDRESS            'Prepare to transfer the file to extended
  92. FB.BLKSIZE = 100                'Will transfer only 100 bytes
  93. FB.FPTRMODE = 0                 'File pointer is relative to start of file
  94. FB.FPTR = 100                   'Set file pointer to 50th element
  95. CALL XFREAD(FB)                 'Read last 50 elements to extended
  96. IF FB.CONDCODE <> 0 THEN
  97.   PRINT "File read error:  "; HEX$(FB.CONDCODE)
  98.   END
  99. END IF
  100.  
  101. CALL MOVMEM(ARRAYADDRESS, XADDRESS, 100)  'Transfer file data back to ARRAY()
  102.  
  103. CALL XFCLOSE(FB)                'Close the file
  104. IF FB.CONDCODE <> 0 THEN
  105.   PRINT "File close error:  "; HEX$(FB.CONDCODE)
  106.   END
  107. END IF
  108.  
  109. ERRCODE = XFREE(HANDLE)         'Release extended memory
  110. IF ERRCODE <> 0 THEN
  111.   PRINT "Memory release error:  "; HEX$(ERRCODE)
  112.   END
  113. END IF
  114.  
  115. END
  116.  
  117.